﻿/******************************************************************************
 * 创建者：gtts
 * 创建日期：2011.4.11
 * 类名：InterviewTopic
 * 说明：常见面试题目实现
 ******************************************************************************/
using System;
using System.Collections.Generic;
using System.Text;

namespace GTTSOfLibrary.Algorithm
{
    /// <summary>
    /// 常见面试题目实现
    /// </summary>
    public class InterviewTopic
    {
        /// <summary>
        /// 题目：
        /// 用一个循环打印出下面的图形（输入奇数行如3，5，7，...）[中国某外包公司B面试题，2008.11]
        /// </summary>
        /// <param name="n">输入的参数n</param>
        /// <returns>结果图形字符串</returns>
        /// <remarks>
        /// 这种类型的面试题每年都有，且一般小公司常出，主要考查字符串的使用及使用循环的技巧
        /// </remarks>
        /// <example>
        /// 示例：
        /// <code>
        /// static void Main(string[] arg)
        /// {
        ///     string ss=InterviewTopic.Print(7);
        ///     Console.WriteLine(ss);
        /// }
        /// </code>
        /// </example>
        /// <exception cref="IndexOutOfRangeException">当参数小于零或不为奇数时抛出</exception>
        public static string Print(int n)
        {
            if (n % 2 == 0 || n < 1)
            {
                throw new IndexOutOfRangeException("n只能是大于0的奇数！");
            }
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < n*n; i++)
            {
                int j = i / n;
                int j1 = j;
                if (j1>n/2)
                {
                    j1 = n - j1 - 1;
                }
                if (i >= n * j + (n - (2 * j1 + 1)) / 2 &&
                   i <= ((n * (j + 1)) - 1) - (n - (2 * j1 + 1)) / 2)
                {
                    sb.Append("*");
                }
                else
                {
                    sb.Append(" ");
                }
                if ((i + 1) % n == 0)
                {
                    sb.AppendLine();
                }
            }
            return sb.ToString();
        }


    }
}
